use napi_derive_ohos::napi;
use napi_ohos::bindgen_prelude::{External, Result as NapiResult, Env};
use wgpu::{Device, InstanceDescriptor};

// 异步函数，用于创建和配置WebGPU设备
async fn create_device() -> Device {
    // 创建WebGPU实例，指定后端为所有可用后端
    let instance = wgpu::Instance::new(&InstanceDescriptor {
        backends: wgpu::Backends::all(),
        ..Default::default()
    });
    // 请求一个适配器，使用默认配置
    let adapter = instance
        .request_adapter(&wgpu::RequestAdapterOptions::default())
        .await
        .expect("无法请求WebGPU适配器");
    // 请求创建设备和队列，队列用于提交渲染或计算任务
    let (device, _queue) = adapter
        .request_device(&wgpu::DeviceDescriptor::default())
        .await
        .expect("无法创建设备");
    device
}

// 导出的N-API函数，用于创建WebGPU设备
#[napi]
pub fn create_wgpu_device(_env: Env) -> NapiResult<External<Device>> {
    // 使用pollster同步执行异步的设备创建
    let device = pollster::block_on(create_device());
    // 将设备包装为N-API的External对象，返回给调用方
    Ok(External::new(device))
}
